package com.cn.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;

public class JWTUtil {
    // 过期时间
    private static final long EXPIRE_TIME = 3600 * 1000;
    // 签名参数
    private static final String SIGN_PARAM = "Leon";

    /**
     * 生成token
     *
     * @param userID 用户id
     * @param secret 签名信息
     * @return 返回token
     */
    public static String createToken(String userID, String secret) {
        Date expireDate = new Date(System.currentTimeMillis() + EXPIRE_TIME);//有效期
        return JWT.create()
                .withClaim("userID",userID)
                .withExpiresAt(expireDate)
                .sign(Algorithm.HMAC256(secret + SIGN_PARAM));
    }

    /**
     * 校验token
     *
     * @param token  用户令牌
     * @param secret 签名信息
     * @return 返回验签结果
     */
    public static boolean verifyToken(String token, String secret) {
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(secret + SIGN_PARAM)).build();
            DecodedJWT jwt = verifier.verify(token);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 获取token载荷取中的数据
     * @param token
     * @param key
     * @return
     */
    public static String geClaimsOfTken(String token,String key){
        DecodedJWT jwt = JWT.decode(token);
        return jwt.getClaim(key).asString();
    }

}
